import Mongoose from "mongoose";

const user = new Mongoose.Schema({
  title: String,
  description: String,
  by: String,
  url: String,
  tags: [String],
  likes: {
    type: Number,
    validate: {
      //验证器
      validator: function (v: number) {
        if (v < 100) {
          return false;
        }
      },
      message: "like不能小于100",
    },
  },
});

//pre前置中间件钩子(分为串行和并行)每次对应数据库操作执行前会执行这个方法
// @ts-ignore
user.pre("find", true, function (next: () => void, done: () => void) {
  console.log("前置钩子");
  next();
  done(); //pre第二个参数为true时必须要有这个不然程序会停留在前置钩子不会继续往下执行
});
// @ts-ignore
user.post(["find"], function (data: any, next: () => void) {
  console.log(data, "后置钩子");
  next();
});

user.statics = {
  staticTest() {
    console.log("我是static静态方法model不用实例化就能使用");
  },
};
user.methods = {
  methodsTest() {
    console.log("我是methods动态方法model要实例化才能使用");
  },
};

export default Mongoose.model("users", user);
